如果你的Linux需要寄信出去,但又不要當mail server的話,Nullmailer符合此需要。
裝了Linux,大部份的情況下預設安裝啟動一個mail的服務,最早就是 sendmail,之後又可能是 postfix 或是 exim。這些 MTA 的功能強大,往往我們真正要用到的功能其實是很小的一部份,真是常常殺雞用牛刀了。
如果該Linux主機,本身是要提供 Mail server 的功能,sendmail, postfix, exim, qmail 是較常可能的選擇。若Linux上有跑一些網頁程式或什麼服務,需要本機有 /usr/sbin/sendmail 這支程式來做寄信的動作,但本機又不想做任何 mail 服務的話, Nullmailer 正是定位在此需要的功能。
因為 Nullmailer 本身不提供 port 25 來接聽 SMTP 的服務,不會有防垃圾信的議題,只是單純地往外寄,且只提供 本機 來做寄信。
安裝好Nullmailer後,觀察有什麼檔案:
$ pacman -Ql nullmailer
nullmailer /etc/
nullmailer /etc/nullmailer/
nullmailer /usr/
nullmailer /usr/bin/
nullmailer /usr/bin/mailq
nullmailer /usr/bin/nullmailer-inject
nullmailer /usr/bin/nullmailer-queue
nullmailer /usr/bin/nullmailer-send
nullmailer /usr/bin/nullmailer-smtpd
nullmailer /usr/bin/sendmail
nullmailer /usr/lib/
nullmailer /usr/lib/nullmailer/
nullmailer /usr/lib/nullmailer/qmqp
nullmailer /usr/lib/nullmailer/smtp
nullmailer /usr/lib/systemd/
nullmailer /usr/lib/systemd/system/
nullmailer /usr/lib/systemd/system/nullmailer.service
nullmailer /usr/share/
nullmailer /usr/share/man/
nullmailer /usr/share/man/man1/
nullmailer /usr/share/man/man1/nullmailer-inject.1.gz
nullmailer /usr/share/man/man1/sendmail.1.gz
nullmailer /usr/share/man/man7/
nullmailer /usr/share/man/man7/nullmailer.7.gz
nullmailer /usr/share/man/man8/
nullmailer /usr/share/man/man8/nullmailer-queue.8.gz
nullmailer /usr/share/man/man8/nullmailer-send.8.gz
nullmailer /var/
nullmailer /var/nullmailer/
nullmailer /var/nullmailer/queue/
nullmailer /var/nullmailer/tmp/
在執行檔裡有與 sendmail 類似的檔案 sendmail, mailq。
然後在 /etc/nullmailer 裡 編輯一個 remotes 內容的檔案:
ms.mycompany.tw smtp --port=25 --auth-login --user=username --pass=mypass
並編輯 me 這個檔案,內容為可以是 該主機或其他主機的 domain name 之名稱,
然後啟動 nullmailer 的服務後就可為本機提供寄信到 ms.myhcompany.tw 的功能了。
這個是 Nullmailer 的運作圖示:
收到信件裡的header看到的類似是:
Received: (nullmailer pid 1354 invoked by uid 1000);
Fri, 04 Oct 2013 14:57:27 -0000
Date: Fri, 4 Oct 2013 22:57:27 +0800
From: userfrom@mycompany.tw
To: userto@mycompany.tw
Subject: =?utf-8?B?5YaN5a+E5LiA5qyh77yB?=
Message-ID: <20131004145727.GA1350@mycompany.tw>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
User-Agent: Mutt/1.5.21 (2010-09-15)
如果希望 gmail 幫忙寄信的話,可以有 MSA 或 SMTPS 的方式來寄,編輯 /etc/nullmailer/remotes:
# MSA 的模式:
smtp.gmail.com smtp --port=587 --auth-login --user=you@gmail.com --pass=Yourpassword --starttls
# SMTPS 的模式
smtp.gmail.com smtp --port=465 --auth-login --user=you@gmail.com --pass=Yourpassword --ssl
改後記得重新啟動 nullmailer 的服務就會生效。
這個取代MTA程式的限制是,沒有本機信件的功能,只有單純的外寄。
參考資料:
Default MTA:debian 在考量版本裡預設該裝哪一種SMTP 的套件,蠻有趣的考量過程。
nullmailer on Arch Linux:在nullmailer的設定上,有很清楚的設定說明。
Emailing Out: Nullmailer, Mutt, and Automated Email: The Tiny Mail Transfer Agent:這篇有最完整的 Nullmailer 的說明,要設得更完整,參考這篇裡的 config 檔的說明。